#include <stdio.h>
#include <stdlib.h>
#include "list.h"

list list_create(int size)
{
	list l = (list)malloc(sizeof(struct list));
	if (l == NULL) return NULL;
	l->elem = (void **)malloc(size*sizeof(void *));
	if (l->elem == NULL) {
		free(l); return NULL;
	}
	l->length = 0;
	l->size = size;

	return l;
}

void list_add(list l, void *data) 
{
	if (l->length == l->size) {
		printf("list is full...\n");
		return;
	}
	l->elem[l->length++] = data;
}

void *list_remove(list l, void *data) 
{
	int 	i, j;

	for (i = 0; i < l->length && data != l->elem[i]; i++);
	if (i == l->length) return NULL;
	l->length--;
	for (j = i; j < l->length; j++) {
		l->elem[j] = l->elem[j+1];
	}

	return data;
}
void list_destroy(list l)
{
	free(l->elem);
	free(l);
}

int list_length(list l)
{
	return l->length;
}
